home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
92
/
STARSHIP.CD
< prev
next >
Wrap
Text File
|
1995-09-15
|
12KB
|
212 lines
@VCsillaghajón a pokolba@N
@VA Starship vírus@N
A vírusszakemberek az önmagukat átíró vírusokról
informálják a programozókat, remélve, hogy a védekezôket és
nem az új vírusok kiagyalóit támogatják ezzel.
Az Internet adathálózaton egyre-másra érkeznek az
érdekes vírushatás-elemzések. Rámutatnak arra, hogy egy
vírus programozástechnikai trükkjeinek ismertetése immár az
adatbiztonságot szolgálja. Korábban az volt az álláspont,
hogy a teljes hallgatás a célravezetô. A vírusokban használt
rutinok nagy része ugyanis tisztességes célokra is kiválóan
alkalmazható.
A nemzetközi rendszerekben egyre többször találkozunk a
zöld és a vörös kód fogalmával. A vörösön a továbbra sem
publikálandó, etikátlan kezekben igen veszélyes kódokat
értik, például a MUTATE.ASM mutációs rutin teljes
forráskódját és a teljes vírus-forráskódokat. A további, e
körbe nem esô információk immár megzöldültek, azaz
publikálhatók. Ezek nem teljes víruskódok, hanem érdekes
részmegoldások. Céljuk az, hogy ismertté váljanak, és
elvegyék a vírusíró ""szakemberek" és
másolásvédelem-fejlesztôk kedvét ezek alkalmazásától.
A Starship, azaz ""Csillaghajó" vírus Moszkvából
származik. Megoldásai alapján vélhetô, hogy nem egy ember
kutatásainak eredménye, talán a közvetve bizonyított szovjet
vírusfejlesztési program terméke. I. G. Muttik volt az elsô,
aki részletesen elemezte e kettôs természetû vírus
felépítését és mûködését.
Az ötlet, hogy a bootszektort és file-okat egyaránt
megfertôzô vírusokat fejlesszenek, nem olyan régi. Az elsô
ilyen kettôs természetû vírus a Fridrik Skulason által
felfedezett Ghost volt, amit a Thanksgiving (V-1), a Tequila
és a Starship követett. Ezek megôrjítették a hagyományos
kategóriákban gondolkodó szakembereket.
A Starship Moszkvában jelent meg 1991 januárjában, onnan
indult világjáró útjára. Amikor egy Starship vírus elindul
és fertôz, az a dolga, hogy bootvírusként módosítsa a
merevlemez bootszektorát. Miután a vírus felírta magát és
egy rendszerhívás történt, a vírus átveszi az INT 13H
(alacsony szintû lemezkezelés) és az INT 21H (DOS
funkcióhívások) vezérlését. Utána jön az elsô nagy trükk,
elteszi magát a BB00:0 címtôl kezdve a videomemóriába. Ott
senki sem keresi! Amikor rezidens, akkor COM és EXE
file-okat fertôz a floppykon. A memóriában 2680 byte hosszú,
valódi kód hossza 2560 byte. A különbség a változók és a
puffer által lefoglalt területbôl adódik. A merevlemezen 6
szektort foglal le, egyenként 512 byte-tal, ami összesen
3072 byte. Ekkor bootvírusként viselkedik... Felfedezhetô,
hogy a memóriában -- és csakis ott -- egy szöveg jelenik
meg, errôl kapta nevét:
@K>STARSHIP_1<@N
Normálisan a vírus a B00H eltolási címen található. A
13H, 21H és 27H interruptokat használja, és ami a vírusok
között ritkaság, csinál magának két speciális interruptot
(F9H és FCH).
A vírusban van egy véletlengenerátor, amely a
videozavarokat és a fertôzési mechanizmust vezérli. A
véletlengenerátor kezdôértékét a BIOS timer idôszámlálójából
veszi, a 0:46CH címrôl. A titkosítás során is ezt használja
fel. XOR módszerrel kódolja el önmagának mintegy 56%-át,
minden fertôzéskor más-más kezdôértékkel XOR-ol.
A Starship a COM file-ok esetében minimálisan 1917 byte
hosszú file-okat, EXE programok esetében minimálisan 1917
byte, maximálisan pedig 512 Kbyte hosszúságú file-okat
fertôz. A COMMAND.COM is ugyanúgy fertôzôdik, mint a többi
COM file. Az egyes programfile-típusokat nem nevük, hanem
jellegzetes kezdetük (fejlécük) alapján azonosítja. A nem
szabványos COM és EXE programokat emiatt elrontja.
A COM file-okban az elsô 3 byte-ot írja át fertôzéskor.
Ide egy JMP utasítás három byte-ja kerül, ami a vírus
kezdetére mutat, az eredeti byte-okat a vírus belsejében
tárolja el, titkosítva.
Az EXE file-ok fejlécét alaposan megváltoztatja. Oda új
CS:IP belépési pont kerül, ami a vírusra mutat, de
megváltoztatja az AA, SP és MINALLOC paramétermezôket is. Az
eredeti CS, IP, SS, SP értékek a vírus belsejében az A4FH
címen találhatók, kódolva. Az IP utasításmutató az új
fejlécben 4 és 13H közötti értékeket vehet fel. Ållandó az
@KSS-CS=100@N távolság, és az SP értéke: @KSP=800H@N. A Starship nem
fertôzi meg az olyan EXE file-okat, amelyek fejlécében a
MAXALLOC mezô értéke kisebb mint 0FFFFH. A vírus a file
végéhez adódik, kódolt formában, amit a vírus dekódoló
rutinja -- ez állandó -- fejt vissza. A file-ok
visszaállításához szükséges információt mindig a vírus
kódolt részébôl kell visszabányászni, ami viszont mindig
másképp van kódolva... Ráadásul a kódoló részbe is
rendszeresen belekerülnek semleges NOP utasítások, hogy az
élet itt se legyen egyszerû. Hagyományos eljárással, állandó
szekvenciát keresve nem sokra megyünk, ha detektálni akarjuk
a Starshipet.
A vírus boot üzemmódban is képes dolgozni. Ilyenkor az
eredeti bootszektort alaposan átkódolja. A vírus elôször
teszteli a DOS verziót, 2.0 vagy afelettit igényel. Létrehoz
egy pszeudo (ál) bootszektort, miként más bootvírusok is.
Ebben testének egy részét tárolja. Megnézi azt is, hogy a
videomemória a BB00:0 címtôl rendelkezésére áll-e. Ezt egy
MOV/CMP utasítássorozattal egyszerûen fizikailag teszteli.
Következô lépésben megnézi, hogy ott van-e már a memóriában
0000:04B0 címen, majd az INT 13H nyolcadik funkcióját hívva
megnézi a lemez méretét. Végül az INT 13H közvetlen
meghívásával megfertôzi a bootszektort. Három byte-ot ír át
a kezdô bootszektorban: azt, hogy melyik fejen, mely
szektorban és cilinderen kezdôdik a boot. A vírus a kódját
az elsô fizikai lemezre teszi, a legnagyobb sorszámú fej
által kezelt legutolsó cilinder utolsó 6 szektorába. E
szektorok tartalmát visszaállíthatatlanul felülírja.
A vírus betöltése a sajátmaga által létrehozott ál
bootszektorból indul, amelynek elsô 5 byte-ja ugyanúgy
kezdôdik, mint a valódi (0EBH, 034H, 090H, ""MS"), majd a
következô öt szektorból rögtön a víruskódot küldi a
memóriába. A vírusban van egy boot-számláló, a 01FCH
offszeten, amelynek értéke 00 és 20H között mozoghat. Ez
vezérli a vírus aktivizálódását, de ez nem mindegyik típusú
gépen mûködik. A titkosítás kulcsa az XOR maszk byte, amely
az 01FDH címen található.
A vírus akkor töltôdhet be úgy, hogy a kódolt álboot a
videomemóriába töltôdik a BB00:0000 címtôl kezdve, amikor
egy fertôzött boot rekord elindul. Ott végbemegy a
dekódolás, és a kód lefut, majd maga után tölti a valódi
boot rekordot is a memória megfelelô részébe. Ha monokróm
monitorvezérlô van a gépben, akkor nem mûködik, ugyanis
nincs memóriája a BB00:0000 címen. Amikor betelepült,
megvizsgálja a DOS 20H, 21H és 27H interruptjait, és átveszi
ezek vezérlését. Olyan jó eljárást dolgozott ki erre, hogy a
szisztéma a 2.0--4.01 közötti összes DOS verzió alatt
kifogástalanul üzemel. Az MS DOS 5.0 esetében a reboot során
kiakad. Ållandóan figyeli az INT 20H-t, és az INT 27H
interrupt 00H, 31H és a 4CH funkcióhívásait, és amikor
DOS-ba való kilépést kérô rendszerhívást észlel, sürgôsen a
videomemóriába távozik az avatatlan szem elôl.
Hasonlóképpen, amikor egy program a videomemóriát kezdi
használni, akkor onnan a hagyományos DOS memóriába menti át
magát. Ennek az a következménye, ha egy program egyszerre
akarja használni a DOS-t és a videomemóriát, akkor a gép
kiakad.
A vírus ""file" változata tartalmaz minden olyan kódot,
ami a teljes boot fertôzéshez szükséges, és ez fordítva is
igaz. Valódi ""egyet fizet kettôt kap" jellegû vírus.
Számolja a rendszerindításokat, 32-tôl visszafelé. A
számláló nullára csökkenése után még várni kell pár órát a
vírus aktivizálódására. Ez az idô a lemezaktivitástól függ.
Az idô leteltekor elkezd zenélni, majd a monitoron
megjelenik egy ASCII 250 kódú karakter, azaz egy pont. Ez a
háttérszínnel átfesti a teljes képernyôt. A hang magassága a
merevlemez olvasófejének pozíciójától függ. Amikor nem
fordul senki a merevlemezhez, minden rendben megy, de ha a
merevlemezhez fordul egy program, szaporodnak a pontok és
vonyít a gép. Ha újraindítjuk a rendszert, akkor a vírus vár
egy kicsit, majd elölrôl kezdi a laikusok számára
hardverhibának tûnô ""játékot". Ha nem EGA vagy VGA grafikai
kártya van a gépben, akkor a gép lemerevedik. A Starship nem
tudja kezelni a PS/2 gépeket, ott számos meglepetést
tartogat, aminek oka a videomemória és a DOS memória közötti
csikicsuki játék és az, hogy a mikrocsatorna miatt kissé más
a lemezkezelés.
A Starship merevlemezen csak bootvírusként, floppyn csak
file-vírusként terjed. Merevlemezen a mentesítéshez megoldás
az elmentett boot szektor és partíciós tábla visszatöltése
egy tiszta rendszer indítása után. Losinszkijnek, a szovjet
vírusok atyjának forgalomban van egy Aidstest nevû keresô
programja, amelynek 1991 április utáni verziói a vírust
Starship-2616 néven felismerik, de csak törlést ajánlanak
fel. A nagyobb nyugati víruskeresôk is rövidesen
felkészülnek e kevéssé ismert, de szerencsére lassan terjedô
vírus fogadására.
A vírusszakma emberei tesztnek szánják az errôl a
vírusról és a Joshi vírus átírási lehetôségeirôl szóló
szakmai tanulmányaikat, amiket a szokástól eltérôen
elektronikus publikációs csatornákon is terjesztenek --
többek között a Virnet rendszeren és a Compuserve
vírusfórumán keresztül. E tanulmányokban nincs részletes
víruskód, de elegendô támpontot adnak ahhoz, hogy ha valaki
találkozik a vírussal és ért a programozáshoz, elbánjon
vele. A szakemberek kíváncsian várják, hogy az itteni
ötletek megjelennek-e az új vírusokban vagy
másolásvédelmekben. Ha igen, akkor a számítógépes
szakembergárda megbukott az érettségin, s továbbra is marad
az ilyen jellegû anyagok publikálásának megszokott,
szigorúan zárt rendje.
@KKis János@N
A Starship vírus részeinek elhelyezkedése:
──────────────────────────────────────────
Hossz % Offset (hex) Leírás
3% 000--04F változódefiníciók és pufferterület
5% 050--0C1 INT 13H handler
10% 0C2--1C7 INT 21H handler
11% 1C8--312 aktív rész és DOS-t ellenôrzô rutinok
2% 313--340 véletlenszám-generátor
7% 341--3F7 INT 20H, 21H, 27H handlerek
┌─── titkosított rész ───────────────────────────────────────┐
│25% 3F8--692 a COM/EXE fertôzô része, részletesen:│
│ 9% 3F8--4DD input logic │
│10% 4DE--5E9 fertôzött kód készítése │
│ 6% 5EA--692 output logic │
│ 3% 693--6E5 táblázatok │
│ 3% 6E6--738 startup code: EXE/COM │
│12% 739--88F lemezfertôzés │
│ 2% 891--8BF INT 01H handler (trace) │
│11% 8C0--9D7 pszeudo DOS boot és B0H handler │
└────────────────────────────────────────────────────────────┘
4% 9D8--A4E kódot a videomemóriából kitakarító rutin
2% A4F--A8F pufferek (CS, IP, SS, SP stb.)
Forrás: FIDO/Virnet